﻿' ******************************************************************************
' ** 
' **  Yahoo! Managed
' **  Written by Marius Häusler 2011
' **  It would be pleasant, if you contact me when you are using this code.
' **  Contact: YahooFinanceManaged@gmail.com
' **  Project Home: http://code.google.com/p/yahoo-finance-managed/
' **  
' ******************************************************************************
' **  
' **  Copyright 2011 Marius Häusler
' **  
' **  Licensed under the Apache License, Version 2.0 (the "License");
' **  you may not use this file except in compliance with the License.
' **  You may obtain a copy of the License at
' **  
' **    http://www.apache.org/licenses/LICENSE-2.0
' **  
' **  Unless required by applicable law or agreed to in writing, software
' **  distributed under the License is distributed on an "AS IS" BASIS,
' **  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
' **  See the License for the specific language governing permissions and
' **  limitations under the License.
' ** 
' ******************************************************************************


Namespace Base

    ''' <summary>
    ''' Base event class for asynchronous download processes and provides the individual user argument. This class must be inherited.
    ''' </summary>
    ''' <remarks></remarks>
    Public MustInherit Class DownloadEventArgs
        Inherits EventArgs
        Private mUserArgs As Object = Nothing
        ''' <summary>
        ''' Gets the user argument that were passed when the download was started.
        ''' </summary>
        ''' <value></value>
        ''' <returns>An object defined by the user</returns>
        ''' <remarks></remarks>
        Public ReadOnly Property UserArgs() As Object
            Get
                Return mUserArgs
            End Get
        End Property
        Protected Sub New(ByVal userArgs As Object)
            mUserArgs = userArgs
        End Sub
    End Class

    ''' <summary>
    ''' Base event class for changed asynchronous download processes that provides additionally the response of the download. This class must be inherited.
    ''' </summary>
    ''' <remarks></remarks>
    Public MustInherit Class DownloadChangedEventArgs
        Inherits DownloadCompletedEventArgs
        Private mMaximumResults As Integer = 0
        Private mReceivedResultsCount As Integer = 0
        ''' <summary>
        ''' The number of currently received results.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property ReceivedResultsCount() As Integer
            Get
                Return mReceivedResultsCount
            End Get
        End Property
        ''' <summary>
        ''' The maximum number of received results.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>If value is 0, all results will be downloaded</remarks>
        Public ReadOnly Property MaximumResultsCount() As Integer
            Get
                Return mMaximumResults
            End Get
        End Property
        ''' <summary>
        ''' The calculated percentage of download progress.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Percentage() As Double
            Get
                If mMaximumResults > 0 Then : Return mReceivedResultsCount / mMaximumResults
                Else : Return 0
                End If
            End Get
        End Property
        Protected Sub New(ByVal userArgs As Object, ByVal resp As IResponse, ByVal max As Integer, ByVal received As Integer)
            MyBase.New(userArgs, resp)
            mMaximumResults = max
            mReceivedResultsCount = received
        End Sub
    End Class

    ''' <summary>
    ''' Base event class for completed asynchronous download processes that provides additionally the response of the download. This class must be inherited.
    ''' </summary>
    ''' <remarks></remarks>
    Public MustInherit Class DownloadCompletedEventArgs
        Inherits DownloadEventArgs
        Private mResponse As IResponse = Nothing
        ''' <summary>
        ''' Gets the response of the download process.
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Response() As IResponse
            Get
                Return mResponse
            End Get
        End Property
        Protected Sub New(ByVal userArgs As Object, ByVal resp As IResponse)
            MyBase.New(userArgs)
            mResponse = resp
        End Sub
    End Class


End Namespace